package IPrototipo.Funcionalidades.ABMCompetencia;

import IPrototipo.Entidades.Competencia;
import IPrototipo.Entidades.Disponibilidad;
import IPrototipo.Entidades.Modalidad;
import IPrototipo.Funcionalidades.Menues.*;

import java.awt.ComponentOrientation;
import java.awt.Dimension;
import javax.swing.AbstractAction;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.border.TitledBorder;
import javax.swing.SwingConstants;
import javax.swing.border.SoftBevelBorder;
import javax.swing.border.BevelBorder;
import javax.swing.DefaultComboBoxModel;


public class AltaCompetenciaDeportiva extends PanelGeneral {

	//Componentes de la interfaz!!
	private static final long serialVersionUID = 1L;
	private JTextField txNombre;
	private JTable tableLugares;
	private JTable tableDatosEntrada;
	private JComboBox<String> cbModalidad;
	private JScrollPane scrollPaneDatosEntrada;
	private JComboBox<String> cbDeporte;

	
	//Extends!!
	private iModalidadLiga liga;
	private iModalidadEliminatoria elim;
	private iReglamento idReglamento;


	//ATRIBUTOS!!!
	private Object[][] valores;
	private String[] columnas;
	private Competencia competencia;
	private String reglamento;
	private Modalidad modalidad;
	private iBuscarLugares ilugares;
	private Vector<Disponibilidad> lugares;
	private Object[][] stringElegidos;
	private String[] columnNamesLugares={"Codigo","Nombre del Lugar","Cantidad"};
	
	
	//ATRIBUTOS!!
	private String nombre;
	private String deporte;
	private String modNombre;
	private int modPPG;
	private boolean modPermiteEmpate;
	private int modPPE;
	private int modPPPresentarse;
	private int modTantosPorAusenciaRival;
	private String modFormaPuntuacion;
	private int cantidadSets;
	
	
	
	public AltaCompetenciaDeportiva(FrameUsuarioAutenticado framePerteneciente) {
		
		
		super(framePerteneciente);
		
		setPreferredSize(new Dimension(800, 500));
		setAlignmentY(1.0f);
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		setNombreCU("Dar Alta Competencia Deportiva");
		

		
        ImageIcon agregar= new ImageIcon(getClass().getResource("/Imagenes/imagenmas.jpg"));
        ImageIcon eliminar= new ImageIcon(getClass().getResource("/Imagenes/imagenmenos.jpg"));

		Component glueArriba = Box.createGlue();
		add(glueArriba);
		
		Modalidad ret=new Modalidad();
		ret.setTipoModalidad("Prueba");
		
		JPanel panelNombre = new JPanel();
		panelNombre.setOpaque(false);
		add(panelNombre);
		
		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setHorizontalAlignment(SwingConstants.RIGHT);
		panelNombre.add(lblNombre);
		
		txNombre = new JTextField();
		panelNombre.add(txNombre);
		txNombre.setPreferredSize(datos);
		
		Component horizontalStrut_1 = Box.createHorizontalStrut(20);
		panelNombre.add(horizontalStrut_1);
		
		JLabel lblDeporte = new JLabel("Deporte:");
		lblDeporte.setHorizontalAlignment(SwingConstants.RIGHT);
		panelNombre.add(lblDeporte);
		
		cbDeporte = new JComboBox<String>();
		cbDeporte.setModel(new DefaultComboBoxModel<String>(new String[] {"Futbol"}));
		panelNombre.add(cbDeporte);
		cbDeporte.setPreferredSize(datos);
		
		Component horizontalStrut_2 = Box.createHorizontalStrut(20);
		panelNombre.add(horizontalStrut_2);
		
		JLabel lblModalidad = new JLabel("Modalidad:");
		lblModalidad.setHorizontalAlignment(SwingConstants.RIGHT);
		panelNombre.add(lblModalidad);
		
		cbModalidad = new JComboBox<String>();
		cbModalidad.setModel(new DefaultComboBoxModel<String>(new String[] {"", "Liga", "Simple Eliminatoria", "Doble Eliminatoria"}));
		panelNombre.add(cbModalidad);
		cbModalidad.setPreferredSize(new Dimension(150, 30));
		cbModalidad.addActionListener(new cbModalidadAction());
		
		JPanel panelDatosEntrada = new JPanel();
		panelDatosEntrada.setOpaque(false);
		add(panelDatosEntrada);
		{
		
			scrollPaneDatosEntrada = new JScrollPane();
			panelDatosEntrada.add(scrollPaneDatosEntrada);
			scrollPaneDatosEntrada.setPreferredSize(new Dimension(600, 50));
	
			String[] columnNamesDatosEntrada={};
			Object[][] valoresDatosEntrada={};
			
			tableDatosEntrada = new JTable();
			tableDatosEntrada.setModel(new DefaultTableModel(valoresDatosEntrada,columnNamesDatosEntrada));
			tableDatosEntrada.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
			scrollPaneDatosEntrada.setViewportView(tableDatosEntrada);
			
		}
		
		JPanel panelLugares = new JPanel();
		panelLugares.setOpaque(false);
		add(panelLugares);
		
		JScrollPane scrollPaneLugares = new JScrollPane();
		scrollPaneLugares.setBorder(new TitledBorder(null, "Lugares", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelLugares.add(scrollPaneLugares);
		scrollPaneLugares.setPreferredSize(new Dimension(400, 120));
		
		tableLugares = new JTable();

		actualizarLugares();
		tableLugares.setModel(new MyTableModel(columnNamesLugares, stringElegidos));
		tableLugares.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		scrollPaneLugares.setViewportView(tableLugares);
		
		JPanel panelBotones = new JPanel();
		panelBotones.setOpaque(false);
		panelLugares.add(panelBotones);
		panelBotones.setLayout(new BoxLayout(panelBotones, BoxLayout.Y_AXIS));
		
		JButton btnAgregar = new JButton(agregar);
		btnAgregar.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
		btnAgregar.setToolTipText("Agregar Lugar");
		btnAgregar.addActionListener(new btnAgregarLugar());
		panelBotones.add(btnAgregar);
		
		Component verticalStrut = Box.createVerticalStrut(5);
		panelBotones.add(verticalStrut);
		
		JButton btnEliminar = new JButton(eliminar);
		btnEliminar.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
		btnEliminar.setToolTipText("Eliminar Lugar");
		panelBotones.add(btnEliminar);
		btnEliminar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				actualizarLugares();
			}
		});
		
		JPanel panelReglamento = new JPanel();
		panelReglamento.setOpaque(false);
		add(panelReglamento);
		
		JButton btnReglamento = new JButton("Agregar Reglamento (*)");
		panelReglamento.add(btnReglamento);
		btnReglamento.addActionListener(new agregarReglamentoAction());
		
		
		JPanel panelConfirmarDatos = new JPanel();
		panelConfirmarDatos.setOpaque(false);
		add(panelConfirmarDatos);
		
		JButton btnAceptar = new JButton("Aceptar");
		btnAceptar.setActionCommand("OK");
		panelConfirmarDatos.add(btnAceptar);
		btnAceptar.addActionListener(new aceptarAction());
		btnAceptar.setPreferredSize(new Dimension(120, 30));
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panelConfirmarDatos.add(horizontalStrut);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setActionCommand("Cancel");
		panelConfirmarDatos.add(btnCancelar);
		btnCancelar.setPreferredSize(new Dimension(120, 30));
		btnCancelar.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0){getFramePerteneciente().quitarCU();}});
		
		Component glueAbajo = Box.createGlue();
		add(glueAbajo);
		
		getObligatorios().add(txNombre);

	}
	
	public Competencia getCompetencia() {
		return competencia;
	}


	public Modalidad getModalidad() {
		return modalidad;
	}

	public void actualizarLugares(){
		lugares=new Vector<Disponibilidad>();
		if(ilugares!=null && !ilugares.getLugaresElegidos().isEmpty()){
			lugares=ilugares.getLugaresElegidos();
						
		}
		elegidosToString();
		tableLugares.setModel(new MyTableModel(columnNamesLugares, stringElegidos));
	}
	
	private void elegidosToString(){
		stringElegidos=null;
		if(!lugares.isEmpty()){
			stringElegidos=new Object[lugares.size()][3];
			for(int i=0;i<lugares.size();i++){
				stringElegidos[i][1]=lugares.get(i).getLugar().getNombre();
				stringElegidos[i][0]=lugares.get(i).getLugar().getCodigo();
				stringElegidos[i][2]=lugares.get(i).getCantidad();
			}
		}
	}
	



	public void setModalidad(Modalidad modalidad) {
		this.modalidad = modalidad;
	}


	public class agregarReglamentoAction extends AbstractAction{
		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			if(idReglamento==null){	idReglamento= new iReglamento(getFramePerteneciente(),true);}
			idReglamento.activarDG();
			reglamento=idReglamento.getReglamento();
			
		}
		
	}

	public class cbModalidadAction extends AbstractAction{

		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			String mod=(String) cbModalidad.getSelectedItem();

				if(mod.equals("Liga")){
					if(liga==null || liga.getClass().equals(iModalidadEliminatoria.class))	liga= new iModalidadLiga(getFramePerteneciente(),true);
					liga.activarDG();
						if(liga.isBoton()) {
							
							Modalidad ret=new Modalidad();
							ret.setTipoModalidad("Prueba");
							columnas= new String[7];
							columnas[0]="ppg";
							columnas[1]="Empate";
							columnas[2]="Pe";
							columnas[3]="pts presentarse";
							columnas[4]="forma puntuacion";
							columnas[5]="cantidad sets";
							columnas[6]="Tantos falta Rival";
							
							valores= new Object[1][7];
							valores[0][0]=((iModalidadLiga)liga).getPpg();
							valores[0][1]=((iModalidadLiga)liga).isEmpate();
							valores[0][2]=((iModalidadLiga)liga).getPpe();
							valores[0][3]=((iModalidadLiga)liga).getPpp();
							valores[0][4]=((iModalidadLiga)liga).getForma();
							valores[0][5]=((iModalidadLiga)liga).getSets();
							valores[0][6]=((iModalidadLiga)liga).getRival();
							setModalidad(ret);
							
							tableDatosEntrada.setModel(new MyTableModel(columnas, valores));
							
						}
					}
		
				else if (mod.equals("Simple Eliminatoria") || mod.equals("Doble Eliminatoria")){
					
					if(elim==null || elim.getClass().equals(iModalidadLiga.class)) elim= new iModalidadEliminatoria(getFramePerteneciente(),true);
					elim.activarDG();
						if(elim.isBoton()){
							
							Modalidad ret=new Modalidad();
							ret.setTipoModalidad("Prueba");
							columnas= new String[3];
							columnas[0]="forma puntuacion";
							columnas[1]="cantidad sets";
							columnas[2]="Tantos falta Rival";
	
							valores= new Object[1][3];
							valores[0][0]=((iModalidadEliminatoria)elim).getForma();
							valores[0][1]=((iModalidadEliminatoria)elim).getSets();
							valores[0][2]=((iModalidadEliminatoria)elim).getRival();
							
							tableDatosEntrada.setModel(new MyTableModel(columnas, valores));
							setModalidad(ret);
							
					}
			}
		}
		
	}
	
	public class aceptarAction extends AbstractAction{


		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			if(camposObligatorios(getObligatorios())){
				competencia=((FrameUsuarioAutenticado) getFramePerteneciente()).getgCompetencia().crearCompetencia(txNombre.getText(),
						cbDeporte.getSelectedItem().toString(), null, null, getModalidad(), null, reglamento, "#Nombre","Planificada");
				
				((FrameUsuarioAutenticado) getFramePerteneciente()).getCompetenciasEnBD().add(competencia);
				getFramePerteneciente().quitarCU();
				getFramePerteneciente().cambiarCU(new listarParticipantes(getFramePerteneciente()));
				}
			else gError.mostrarErrorCampos("Faltan Completar Campos Obligatorios");
		}
		
	}
	public class btnAgregarLugar extends AbstractAction{


		private static final long serialVersionUID = 1L;

		@Override
		public void actionPerformed(ActionEvent arg0) {
			if(ilugares==null){	ilugares= new iBuscarLugares(getFramePerteneciente(),true);}
			ilugares.activarDG();
		}

	}
	
}

